#include "Role.h"
#include "Dept.h"
#include <QIODevice>
#include <QList>
#include <QString>


#ifndef USER_H
#define USER_H

#endif // USER_H

class User{
public:
    QString createBy;
    QString createTime;
    QString updateBy;
    QString updateTime;
    QString remark;
    int userId;
    int deptId;
    QString userName;
    QString nickName;
    QString email;
    QString phonenumber;
    QString sex;
    QString avatar;
    QString password;
    QString status;
    int delFlag;
    QString loginIp;
    QString loginDate;
    Dept dept;
    QList<Role> roles;
    QList<int> roleIds;
    QList<int> postIds;
    int roleId;
    bool admin;

    QJsonObject toJsonObject(){
        QJsonObject obj;
        obj.insert("createBy",createBy);
        obj.insert("createTime",createTime);
        obj.insert("updateBy",updateBy);
        obj.insert("updateTime",updateTime);
        obj.insert("remark",remark);
        obj.insert("userId",userId);
        obj.insert("deptId",deptId);
        obj.insert("userName",userName);
        obj.insert("nickName",nickName);
        obj.insert("email",email);
        obj.insert("phonenumber",phonenumber);
        obj.insert("sex",sex);
        obj.insert("avatar",avatar);
        obj.insert("password",password);
        obj.insert("status",status);
        obj.insert("delFlag",delFlag);
        obj.insert("loginIp",loginIp);
        obj.insert("loginDate",loginDate);
        obj.insert("dept",dept.toJsonObject());
        QJsonArray arrRoles;
        for(int i = 0;i< roles.size();i++){
            arrRoles.append(roles[i].toJsonObject());
        }
        obj.insert("roles",arrRoles);
        QJsonArray jsonArrayroleIds;
        for(int i = 0;i< roleIds.size();i++){
            jsonArrayroleIds.append(roleIds.at(i));
        }
        obj.insert("roleIds",jsonArrayroleIds);
        QJsonArray jsonArrayPostIds;
        for(int i = 0;i< postIds.size();i++){
            jsonArrayPostIds.append(postIds.at(i));
        }
        obj.insert("postIds",jsonArrayPostIds);
        obj.insert("roleId",roleId);
        obj.insert("admin",admin);
        return obj;
    }

    static User toUser(QJsonObject userObj){
        User user;
        if (userObj.contains("createBy") && userObj["createBy"].isString()) {
            user.createBy = userObj["createBy"].toString();
        }
        if (userObj.contains("createTime") && userObj["createTime"].isString()) {
            user.createTime = userObj["createTime"].toString();
        }
        if (userObj.contains("updateBy") && userObj["updateBy"].isString()) {
            user.updateBy = userObj["updateBy"].toString();
        }
        if (userObj.contains("updateTime") && userObj["updateTime"].isString()) {
            user.updateTime = userObj["updateTime"].toString();
        }
        if (userObj.contains("remark") && userObj["remark"].isString()) {
            user.remark = userObj["remark"].toString();
        }
        if (userObj.contains("userId") && userObj["userId"].isDouble()) {
            user.userId = userObj["userId"].toInt();
        }
        if (userObj.contains("deptId") && userObj["deptId"].isDouble()) {
            user.deptId = userObj["deptId"].toInt();
        }
        if (userObj.contains("userName") && userObj["userName"].isString()) {
            user.userName = userObj["userName"].toString();
        }
        if (userObj.contains("nickName") && userObj["nickName"].isString()) {
            user.nickName = userObj["nickName"].toString();
        }
        if (userObj.contains("email") && userObj["email"].isString()) {
            user.email = userObj["email"].toString();
        }
        if (userObj.contains("phonenumber") && userObj["phonenumber"].isString()) {
            user.phonenumber = userObj["phonenumber"].toString();
        }
        if (userObj.contains("sex") && userObj["sex"].isString()) {
            user.sex = userObj["sex"].toString();
        }
        if (userObj.contains("avatar") && userObj["avatar"].isString()) {
            user.avatar = userObj["avatar"].toString();
        }
        if (userObj.contains("password") && userObj["password"].isString()) {
            user.password = userObj["password"].toString();
        }
        if (userObj.contains("status") && userObj["status"].isString()) {
            user.status = userObj["status"].toString();
        }
        if (userObj.contains("delFlag") && userObj["delFlag"].isDouble()) {
            user.delFlag = userObj["delFlag"].toInt();
        }
        if (userObj.contains("loginIp") && userObj["loginIp"].isString()) {
            user.loginIp = userObj["loginIp"].toString();
        }
        if (userObj.contains("loginDate") && userObj["loginDate"].isString()) {
            user.loginDate = userObj["loginDate"].toString();
        }
        if (userObj.contains("dept") && userObj["dept"].isObject()) {
            QJsonObject deptObj = userObj["dept"].toObject();
            user.dept = Dept::toDept(deptObj);
        }
        if (userObj.contains("roles") && userObj["roles"].isArray()) {
            QJsonArray roleArr = userObj["roles"].toArray();
            for (int i = 0; i < roleArr.size(); i++) {
                if (roleArr[i].isObject()) {
                    QJsonObject roleObj = roleArr[i].toObject();
                    Role role = Role::toRole(roleObj);
                    user.roles.append(role);
                }
            }
        }
        if (userObj.contains("roleIds") && userObj["roleIds"].isArray()) {
            QJsonArray roleIdArr = userObj["roleIds"].toArray();
            for (int i = 0; i < roleIdArr.size(); i++) {
                if (roleIdArr[i].isDouble()) {
                    int roleId = roleIdArr[i].toInt();
                    user.roleIds.append(roleId);
                }
            }
        }
        if (userObj.contains("postIds") && userObj["postIds"].isArray()) {
            QJsonArray postIdArr = userObj["postIds"].toArray();
            for (int i = 0; i < postIdArr.size(); i++) {
                if (postIdArr[i].isDouble()) {
                    int postId = postIdArr[i].toInt();
                    user.postIds.append(postId);
                }
            }
        }
        if (userObj.contains("roleId") && userObj["roleId"].isDouble()) {
            user.roleId = userObj["roleId"].toInt();
        }
        if (userObj.contains("admin") && userObj["admin"].isBool()) {
            user.admin = userObj["admin"].toBool();
        }
        return user;
    }
};
